<?php
App::uses('AppController', 'Controller');
/**
 * Emprestimos Controller
 *
 * @property Emprestimo $Emprestimo
 */
class EmprestimosController extends AppController {

	var $components = array('EmprestimosService', 'configs');

	public function lista() {
		$this->Emprestimo->recursive = 0;
		if($this->admin())
			$this->set('emprestimos', $this->paginate());
		else 
			$this->set('emprestimos', $this->paginate(array('alunos_id'=>$this->usuarioAtual['id_alunos'])));
		
		$this->render('index');
	}

	// TODO impedir empréstimo de livro perdido e que não circula
	public function novo() {
		if(!$this->admin()){
			throw new MethodNotAllowedException(__('Opção inválida'));
		}
		if ($this->request->is('post')) {
			
			$codigo_format = $this->Emprestimo->Livro->formataCodigo($this->request->data['Emprestimo']['codigo']);
			$this->request->data['Emprestimo']['livros_id'] =
					$this->Emprestimo->Livro->buscaLivroPorCodigoParaEmprestimo(
						$codigo_format['codigo']
					);
			$this->request->data['Emprestimo']['exemplar'] = $codigo_format['exemplar'];
			
			if(!$this->request->data['Emprestimo']['livros_id']){
				$this->Session->setFlash(__('Erro de código!'));
				$this->redirect(array('action' => 'novo'));
			}
				
			// SEM EXEMPLARES
			if(!$this->Emprestimo->Livro->exemplaresDisponivel($this->request->data['Emprestimo']['livros_id'])){
				$this->Session->setFlash(__('Não existem exemplares disponíveis!'));
				$this->redirect(array('action' => 'novo'));
			}
			
			// CALCULAR DATA DE DEVOLUCAO
			$this->request->data['Emprestimo']['devolver_em'] = $this->Emprestimo->calculaDevolucao(
										$this->configs->getProp('periodo_emprestimo'));
			$this->request->data['Emprestimo']['retirada'] = array('day'=>date('d'), 'month'=>date('m'), 'year'=>date('Y'));
			$this->Emprestimo->create();
			if ($this->Emprestimo->save($this->request->data)) {
				$aluno = $this->Emprestimo->Aluno->findByIdAlunos($this->request->data['Emprestimo']['alunos_id']);
				$livro = $this->Emprestimo->Livro->findByIdLivros($this->request->data['Emprestimo']['livros_id']);
				if($this->EmprestimosService->emailReciboEmprestimo($aluno, $livro, $this->request->data, $this->Emprestimo->id)){
					$this->Emprestimo->Livro->emprestimo($livro['Livro']);
					$this->Emprestimo->Aluno->emprestimo($aluno['Aluno']);
					$this->Session->setFlash(__('Emprestimo efetuada com sucesso!'));;
					$this->redirect(array('action' => 'lista'));
				}
				else{
					$this->Session->setFlash(__('E-mail não pode ser enviado. Por favor tente novamente'));
				}
			} else {
				$this->Session->setFlash(__('Emprestimo Não pode ser salvo. Por favor tente novamente'));
			}
		}
		$this->set(compact('alunos', 'livros'));
		$this->set("data_devolucao", $this->configs->getProp("periodo_emprestimo"));
		$this->set('nomes', $this->Emprestimo->Aluno->find('list'));
	$this->render('add');
	}
	
	
	private function enviaEmail($dadosEmprestimo){
		if($this->EmprestimosService->emailDevolucao($dadosEmprestimo)){
					$this->Session->setFlash(__('Devolução efetuada com sucesso!'));
				}else
					$this->Session->setFlash(__('E-mail não pode ser enviado. Por favor tente novamente'));
	}
	
	public function finalizarEmprestimo($id){
		if(!$this->admin()){
			throw new MethodNotAllowedException(__('Opção inválida'));
		}
		$salvo = $this->Emprestimo->finalizarEmprestimo($id);
		if($salvo){
			$this->enviaEmail($salvo);
			$this->Session->setFlash(__('Devolução efetuado com sucesso'));
		}
		else{
			$this->Session->setFlash(__('Devolução não pode ser efatuada. Por favor tente novamente'));
		}
		$this->redirect(array('action' => 'lista'));
	}
	
	public function devolver_livro(){
		if(!$this->admin()){
			throw new MethodNotAllowedException(__('Opção inválida'));
		}
		if(!empty($this->request->data)){
			
			$codigo_format = $this->Emprestimo->Livro->formataCodigo($this->request->data['Emprestimo']['codigo']);
			$this->request->data['Emprestimo']['livros_id'] =
					$this->Emprestimo->Livro->buscaLivroPorCodigoParaEmprestimo(
						$codigo_format['codigo']
					);
			$this->request->data['Emprestimo']['exemplar'] = $codigo_format['exemplar'];
			if(!$this->request->data['Emprestimo']['livros_id']){
				$this->Session->setFlash(__('Erro de código!'));
				//$this->redirect(array('action' => 'devolver_livro'));
			}
			
			$emprestimo = $this->Emprestimo->procuraPorLivroAluno($this->request->data['Emprestimo']['livros_id'], $this->request->data['Emprestimo']['aluno_id'], $codigo_format['exemplar']);
			$salvo = $this->Emprestimo->finalizarEmprestimo($emprestimo['Emprestimo']['id_emprestimos']);
			if($salvo){
				$this->enviaEmail($salvo);
			}
			else{
				$this->Session->setFlash(__('Devolução não pode ser efatuada. Por favor tente novamente'));
			}
		}
		$this->set('nomes', $this->Emprestimo->Aluno->find('list'));
	}
}
